package faktorI;

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import glavni.Menadzer;

public class DijalogPravila extends JDialog {
	
	private JButton[] dugmad = new JButton[3];
	private JTextField polje;
	private int brPravila;
	private JDialog dijalog;
	private Menadzer roditelj;
	
	public DijalogPravila() {
		super(FaktorIRadnaPovrs.instanca().dohvatiMenadzera(), "Definisanje pravila", true);
		setLayout(new FlowLayout());
		setSize(700, 100);
		setResizable(false);
		setLocationRelativeTo(null);
		dugmad[0] = new JButton("Dodaj pravilo",new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/addP.JPG")));
		dugmad[0].setFont(Font.decode("Serif-ITALIC-15"));
		add(dugmad[0]);
		dugmad[0].requestFocus();
		add(new JLabel("               "));
		add(dugmad[1] = new JButton("Izmeni pravilo",new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/changeP.JPG"))));
		dugmad[1].setFont(Font.decode("Serif-ITALIC-15"));
		add(new JLabel("br."));
		add(polje = new JTextField(3));
		polje.setFont(Font.decode("Arial-15"));
		add(new JLabel("   "));
		add(dugmad[2] = new JButton("Nova pravila",new ImageIcon(Toolkit.getDefaultToolkit().getImage(
			"files/icons/delP.JPG"))));
		dugmad[2].setFont(Font.decode("Serif-ITALIC-15"));
		add(new JLabel(" "));
		
		if(LstPrav.instanca().prazna()){
			dugmad[1].setEnabled(false);  
			polje.setEditable(false); 
			dugmad[2].setEnabled(false);  
		}
		addListeners();
	}
	
	private void addListeners() {
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				if (LstPrav.instanca().prazna()) 
					prikaziObavestenje();
				if (FaktorIRadnaPovrs.instanca().startnoStanjeKompletno()){
					FaktorIRadnaPovrs.instanca().dohvatiMenadzera().dozvoliNaPocetak();
					FaktorIRadnaPovrs.instanca().dohvatiTaster(3).setEnabled(true);
					FaktorIRadnaPovrs.instanca().dohvatiPrikaz(3).requestFocus();
				}
			}

			public void windowClosed(WindowEvent we) {
				if (FaktorIRadnaPovrs.instanca().startnoStanjeKompletno()){
					FaktorIRadnaPovrs.instanca().dohvatiMenadzera().dozvoliNaPocetak();
					FaktorIRadnaPovrs.instanca().dohvatiTaster(3).setEnabled(true);
					FaktorIRadnaPovrs.instanca().dohvatiPrikaz(3).requestFocus();
				}
			}
		});
		
		dugmad[0].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				dijalog = new DijalogPravilo();
				dijalog.setVisible(true);
			}
		});
		dugmad[1].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				try{
					brPravila = Integer.parseInt(polje.getText());
				}catch(NumberFormatException e){
						if ("".equals(polje.getText()))
							new GreskaD(roditelj, "Niste uneli broj pravila!");
						else
							new GreskaD(roditelj, "Niste pravilno uneli broj pravila!");
						return;
				}
				Pravilo pravilo = LstPrav.instanca().pronadji(brPravila);
				if(pravilo != null){
					dijalog = new DijalogPravilo(pravilo);
					dijalog.setVisible(true);
				}
				else{
					new GreskaD(roditelj, "Pravilo sa tim brojem ne postoji!");
				}
			}
			
		});
		
		polje.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent ke) {
				if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
					try{
						brPravila = Integer.parseInt(polje.getText());
					}catch(NumberFormatException e){
							if ("".equals(polje.getText()))
								new GreskaD(roditelj, "Niste uneli broj pravila!");
							else
								new GreskaD(roditelj, "Niste pravilno uneli broj pravila!");
							return;
					}
					Pravilo pravilo = LstPrav.instanca().pronadji(brPravila);
					if(pravilo != null){
						dijalog = new DijalogPravilo(pravilo);
						dijalog.setVisible(true);
					}
					else{
						new GreskaD(roditelj, "Pravilo sa tim brojem ne postoji!");
					}
				}
			}
		});
		
		dugmad[2].addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				LstPrav.instanca().isprazni();
				LstOpaz.instanca().isprazni();
				LstZaklj.instanca().isprazni();
				FaktorIRadnaPovrs.instanca().dohvatiPrikaz(0).setText(LstPrav.instanca().toString());
				dugmad[1].setEnabled(false);  
				polje.setEditable(false); 
				dugmad[2].setEnabled(false);
			}
		});	
	}
	
	private void prikaziObavestenje() {
		JOptionPane.showMessageDialog(this,
				"Morate definisati pravila, opažanja i zaključak\n"
						+ " da bi se simulacija mogla pokrenuti!",
				"Obaveštenje", JOptionPane.INFORMATION_MESSAGE);
	}
}
